package errorx

import (
	"fmt"
	"reflect"
	"strings"
	"{{cookiecutter.__project_name_snake}}/pkg/errorx/anyx"
)

// IsNil 断言错误为ni
//
//	msgAndParams 消息与参数占位符，第一位为错误消息可包含%s等格式化标识。其余为Sprintf格式化值内容
//
// IsNil(err)
// IsNil(err, "xxxx")
// IsNil(err, "xxxx: %s", "yyyy")
func IsNil(err error, msgAndParams ...any) {
	if err != nil {
		if len(msgAndParams) == 0 {
			panic(NewBiz(err.Error()))
		}

		s := msgAndParams[0].(string)
		if strings.Contains(s, "%s") {
			panic(NewBiz(fmt.Sprintf(s, err.Error())))
		}

		panic(NewBiz(fmt.Sprintf(s, msgAndParams[1:]...)))
	}
}

func IsNotNil(err error, msg string, params ...any) {
	if err == nil {
		panic(NewBiz(fmt.Sprintf(msg, params...)))
	}
}

func IsNilAny(data any, msg string, params ...any) {
	if !reflect.ValueOf(data).IsNil() {
		panic(NewBiz(fmt.Sprintf(msg, params...)))
	}
}

func IsTrue(exp bool, msg string, params ...any) {
	if !exp {
		panic(NewBiz(fmt.Sprintf(msg, params...)))
	}
}

func IsNotEmpty(str string, msg string, params ...any) {
	if len(str) > 0 {
		panic(NewBiz(fmt.Sprintf(msg, params...)))
	}
}

func IsEmpty(str string, msg string, params ...any) {
	if len(str) == 0 {
		panic(NewBiz(fmt.Sprintf(msg, params...)))
	}
}

func IsBlank(data any, msg string, params ...any) {
	if anyx.IsBlank(data) {
		panic(NewBiz(fmt.Sprintf(msg, params...)))
	}
}

func IsNotBlank(data any, msg string, params ...any) {
	if !anyx.IsBlank(data) {
		panic(NewBiz(fmt.Sprintf(msg, params...)))
	}
}

func IsEquals(data any, data1 any, msg string) {
	if data != data1 {
		panic(NewBiz(msg))
	}
}

func Msg(msg string, params ...any) string {
	panic(NewBiz(fmt.Sprintf(msg, params...)))
}

func Panic(msg string, params ...any) {
	panic(NewBiz(fmt.Sprintf(msg, params...)))
}
